// 引入 creep 配置项
import creepConfigs = require('./creepConfigs');
import creepTree = require('./creepTreeConfigs');

export = function (): void {
  Creep.prototype['$BehaviorTree'] = function () {

  };
  // 添加 updateState 方法
  // 添加 work 方法
  Creep.prototype["work"] = function () {

    if (this.memory.role in creepTree) {
      creepTree[this.memory.role](this);
      return;
    }

    const creepConfigMeta = global.creepConfigMeta;
    if (!(this.memory.role in creepConfigMeta)) {
      console.log(`creep ${this.name} 内存属性 role 不属于任何已存在的 creepConfigs 名称`);
      return
    }
    const creepConfig = creepConfigMeta[this.memory.role];
    if (!this.memory.ready) {
      // 有准备阶段配置则执行
      // 没有就直接准备完成
      if (creepConfig.prepare && creepConfig.isReady) {
        creepConfig.prepare(this);
        this.memory.ready = creepConfig.isReady(this)
      } else this.memory.ready = true;
      return
    }
    // 获取是否工作
    const working = creepConfig.switch ? creepConfig.switch(this) : true;
    // 执行对应操作
    if (working) {
      if (creepConfig.target) creepConfig.target(this)
    } else {
      if (creepConfig.source) creepConfig.source(this)
    }
  };
  Creep.prototype["updateState"] = function (): boolean {
    // creep 身上没有能量 && creep 之前的状态为“工作”
    if ('store' in this && this.store[RESOURCE_ENERGY] <= 0 && this.memory.working) {
      this.memory.working = false;
      this.say('执行 source 阶段')
    }
    // creep 身上能量满了 && creep 之前的状态为“不工作”
    if ('store' in this && this.store[RESOURCE_ENERGY] >= this.store.getCapacity() && !this.memory.working) {
      this.memory.working = true;
      this.say('执行 target 阶段')
    }
    return this.memory.working
  }
};